package com.nf.db.handlers;

import com.nf.db.DaoException;

import java.sql.ResultSet;
import java.sql.SQLException;

import static com.nf.db.handlers.RowProcessor.DEFAULT_ROWPROCESSOR;

/*
 * 让ResultSetHandler处理结果集，并将结果集转换为Bean对象
 * */
public class BeanHandler<T> implements ResultSetHandler<T> {
    private Class<T> clazz;

    /*
     *  这里因为必须要有一个class参数，来创建实例化对象和查找字段赋值
     *  所以这里没有默认的构造函数，需要使用这个有参的构造函数来创建实例化对象
     * */
    public BeanHandler(Class<T> clazz) {
        this.clazz = clazz;
    }

    @Override
    public T handle(ResultSet rs) {
        try {
            if (!rs.next()) return null;
            return DEFAULT_ROWPROCESSOR.toBean(rs,clazz);
        }catch (SQLException e){
            throw  new DaoException("结果集操作失败",e);
        }
    }
}